//#include <iostream>
//#include <string>
//using namespace std;
//
//int main()
//{
//	string a;
//	getline(cin, a);
//	
//	int count = 0;
//	for (string::iterator i = a.begin(); i != a.end(); ++i)
//	{
//		if (*i != 32)
//		{
//			++count;
//		}
//	}
//	cout << count << endl;
//	
//	return 0;
// } 



//#include <iostream>
//#include <string>
//using namespace std;
//
//int main()
//{
//	int n;
//	cin >> n;
//	while(n--)
//	{
//		string s1;
//		cin >> s1;
//		string s2;
//		cin >> s2;
//		if (s1 == s2)
//		{
//			cout << "Tie" << endl;
//		}
//		else if (s1 == "Rock" && s2 == "Scissors")
//		{
//			cout << "Player1" << endl;
//		}
//		else if (s1 == "Scissors" && s2 == "Paper")
//		{
//			cout << "Player1" << endl;
//		}
//		else if (s1 == "Paper" && s2 == "Rock")
//		{
//			cout << "Player1" << endl;
//		}
//		else
//		{
//			cout << "Player2" << endl;
//		}
//	} 
//	
//	return 0;
// } 



//#include <iostream>
//#include <string>
//using namespace std;
//
//int main()
//{
//	string s;
//	getline(cin, s);
//	
//	for (string::iterator it = s.begin(); it < s.end(); ++it)
//	{
//		if((*it >= 'b' && *it <= 'z') || (*it >= 'B' && *it <= 'Z'))
//		{
//			--*it;
//		}
//		else if (*it == 'a')
//		{
//			*it = 'z';	
//		}
//		else if (*it == 'A')
//		{
//			*it = 'Z';
//		}
//	}
//	cout << s << endl;
//	
//	return 0;
//}



#include <iostream>
#include <string>
using namespace std;

int main()
{
	int n;
	cin >> n;
	string s;
	cin >> s;
	int a, b;
	
	while(n--)
	{
		int m;
		cin >> m;
		string str;
		switch(m)
		{
			case 1:
				cin >> str;
				s += str;
				cout << s << endl;
				break;
				case 2:
					cin >> a >> b;
					s = s.substr(a, b);
					cout << s << endl;
					break;
					case 3:
						cin >> a >> str;
						s.insert(a, str);
						cout << s << endl;
						break;
						case 4:
							cin >> str;
							size_t d = s.find(str);
							if (d == string::npos)
							{
								cout << -1 << endl;
							}
							else
							{
								cout << d << endl;
							}
							break;
		}
	}
	
	return 0;
}
